import { getUserInfoApi, loginApi, getBaseUserInfoApi } from '@/api/user'
// 导入js-cookie插件的方法
import { getToken, removeToken, setToken } from '../../utils/auth'
// 导入路由重置方法
import { resetRouter } from '@/router'
const state = {
  token: getToken() || '',
  userInfo: {}
}

const mutations = {
  setToken(state, newToken) {
    state.token = newToken
    setToken(state.token)
  },
  clearToken(state) {
    state.token = ''
    removeToken()
  },
  setUserInfo(state, newUserInfo) {
    state.userInfo = newUserInfo
  },
  clearUserInfo(state) {
    state.userInfo = {}
  }
}

const getters = {}

const actions = {
  // 登录功能
  // login(store, data) {
  //   return new Promise((resolve, reject) => {
  //     // 发送登录请求，异步操作
  //     loginApi(data).then((res) => {
  //       const newToken = res.data
  //       store.commit('setToken', newToken)
  //       // 成功success
  //       resolve(res)
  //     })
  //       .catch((error) => {
  //         reject(error)
  //       })
  //   })
  // },
  async login(store, data) {
    const res = await loginApi(data)
    const newToken = res.data
    store.commit('setToken', newToken)
    return res
  },
  // 获取用户资料的action
  // 因为getUserInfoApi里不需要传参，所以getUserInfo(store,data)里不需要写data
  // getUserInfo(store) {
  //   return new Promise((resolve, reject) => {
  //     getUserInfoApi().then((res) => {
  //       const { data } = res
  //       store.commit('setUserInfo', data)
  //       resolve(res)
  //     }).catch((error) => {
  //       reject(error)
  //     })
  //   })
  // }
  async getUserInfo(store) {
    const { data: data1 } = await getUserInfoApi()
    const { data: data2 } = await getBaseUserInfoApi(data1.userId)
    const baseResult = {
      ...data1,
      ...data2
    }
    store.commit('setUserInfo', baseResult)
    return baseResult
  },
  // 注意，在真实开发场景中，退出是要调用后端接口，同步前后端的token信息
  logout(store) {
    // 清除token
    store.commit('clearToken')
    // 清理用户信息
    store.commit('clearUserInfo')
    // 清除router里边路由表
    resetRouter()
    // 清除vuex的路由表
    store.commit('permission/setRoutes', [], { root: true })
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  getters,
  actions
}
